草庐IT

ruby module_function 与包含模块

全部标签

Ruby 模块和扩展 self

代码在什么情况下:moduleMextendselfdefgreetputs"hello"endend使用比说这样的话更有益:moduleMdefself.greetputs"hello"endend在顶部,一个是被扩展的实例方法,而后者只是一个类方法,但是无论调用哪个方法,你都必须M.greet,对吧?我只是好奇是否有人可以阐明何时使用一个代码而不是另一个代码。谢谢! 最佳答案 第一个示例通常是人们实现module_function功能的一种方式(当他们不知道此方法的存在时)。module_function既是实例方法又是类方法。

ruby - 为什么模块的 'self'方法不能成为类的单例方法?

moduleTestdefself.model_methodputs"thisisamodulemethod"endendclassAincludeTestendA.model_method这将是错误的:undefinedmethod`model_method'forA:Class(NoMethodError)但是当我使用A的元类时,它起作用了:moduleTestdefmodel_methodputs"thisisamodulemethod"endendclassAclass谁能解释一下? 最佳答案 如果你想在包含模块时将类方法和

ruby - 从模块中获取类名

如何从模块中获取包含该模块的类的类名?moduleActMethodsdefsome_method(*attr_names)cls=self.class#thisdoesn'tworkendend我如何进入cls变量,这个模块要加载的类的名称? 最佳答案 self.class确实为您提供了调用该方法的对象的类。假设模块被包含在一个类中,这要么是包含该模块的类,要么是它的子类。如果您真的只想要名称,可以改用self.class.name。如果你用模块扩展了一个类并且你想得到那个类,你可以只做cls=self(或者cls=name如果你

ruby - 获取包含模块的类列表

我有一个mixin,我想为它获取包含它的所有类的列表。在mixin模块中,我执行了以下操作:moduleMyModuledefself.included(base)@classes||=[]@classes这很好用:>MyModule.classes#=>nil>MyClass.new#=>#>MyModule.classes#=>["MyClass"]现在,我想将这部分提取到一个单独的模块中,该模块可以包含在我的其他mixins中。所以,我想出了以下办法:moduleListIncludedClassesdefself.included(base)p"...adding#{base.

ruby - 我在 Mac OS X 上收到 "RVM is not a function"错误,并且没有发布的解决方案有效

我在MacOSx10.8.2(“MountainLion”)上,我成功安装了RVM1.17.8及其依赖项。我可以使用它来使用rvminstall1.9.2安装Ruby版本,但我无法执行rvmuse没有收到此错误:RVMisnotafunction,selectingrubieswith'rvmuse...'willnotwork.Youneedtochangeyourterminalemulatorpreferencestoallowloginshell.Sometimesitisrequiredtouse`/bin/bash--login`asthecommand.Pleasevis

ruby - Ruby 模块中的私有(private)类(不是类方法)?

我是Ruby新手(熟悉Python、C++和C)。我需要创建一个仅供模块中的其他类和方法使用的类。在Python中,我将其称为__classname。我会在C++中使用一个空的typedef。我如何在Ruby中执行此操作(或者我是不是找错了树而不是以“Ruby方式”执行此操作?) 最佳答案 要认识到的最重要的事情是类没有什么特别的。它只是一个对象。按照惯例,类被分配给常量,但没有任何内容表明它们必须是。因为类和任何其他对象一样只是对象,所以将它们设为私有(private)的方式与将任何其他对象设为私有(private)的方式相同。以

Ruby:获取扩展模块列表?

当您在类或其他模块中包含模块时,您可以调用@mymod.included_modules获取包含的模块列表。是否有用于列出扩展模块的等价物?moduleFeature1endmoduleFeature2extendFeature1endFeature2.extended_modules#=>[Feature1] 最佳答案 Feature2.singleton_class.included_modules#=>[Feature1,...] 关于Ruby:获取扩展模块列表?,我们在Stack

ruby-on-rails - 如何命名类名包含数字的 Rails ruby​​ 文件?

Rails类名可以包含数字吗?例如:classTest123end这是一个有效的类吗?当我尝试加载该类时出现uninitializedconstantTest123错误。 最佳答案 我认为ArtemKalinchuk的最后评论应该成为这个用词不当的问题的答案。Ruby类名可以包含数字。Rails类必须在正确命名的文件中定义。如果我定义一个名为NewYear2012Controller的类:正确的文件名:new_year2012_controller.rb文件名不正确:new_year_2012_controller.rb(注意多余的

ruby - 如何检查一个范围是否包含另一个范围的子集?

如果我有两个重叠的范围:x=1..10y=5..15当我说:putsx.include?y输出是:false因为这两个范围只是部分重叠。但是如果我希望它在两个范围之间有部分重叠时为“真”,我该如何写呢?换句话说,我需要一种方法来知道一个范围何时包含另一个范围的子集。我认为有一种优雅的方式可以用Ruby编写它,但我能想到的唯一解决方案是冗长的。 最佳答案 有效的方法是比较极限(x.first 关于ruby-如何检查一个范围是否包含另一个范围的子集?,我们在StackOverflow上找到一

ruby - ApplicationController 的副本已从模块树中删除,但仍处于事件状态

每当两个并发的HTTP请求进入我的Rails应用时,第二个总是返回以下错误:AcopyofApplicationControllerhasbeenremovedfromthemoduletreebutisstillactive!从那里它给出了一个无用的堆栈跟踪,结果是“我们通过了标准服务器的东西,在ApplicationController上运行了你的第一个before_filter(我检查过;它只是先运行的过滤器)”,然后提供以下内容:/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/depe